﻿/* query di base per la stored procedure */
declare @Impianto Varchar(100) = NULL
declare @Impianto1 Varchar(100) = NULL
declare @Impianto2 Varchar(100) = NULL
declare @IDFamiglia int

set @Impianto = '6'
set @Impianto1 = '1,2,3'
set @Impianto2 = '5,15'
set @IDFamiglia = 8

SELECT
sum(GP.Movimenti.Quantita) as Kg, count(GP.Movimenti.quantita) as N
FROM GP.composizionecolori  
INNER JOIN GP.Movimenti ON GP.composizionecolori.idpolvere = GP.movimenti.idpolvere
INNER JOIN GP.Impianti ON GP.Movimenti.IDImpianto = GP.Impianti.IDImpianto
INNER JOIN GP.causalimagazzino ON GP.Movimenti.IDcausale = GP.causalimagazzino.IDcausale
INNER JOIN GP.anagcolori ON GP.composizionecolori.IDCOlore = GP.anagcolori.IDCOlore
where GP.causalimagazzino.codcausale = 'S'
      --and (((@DatamovimentoFrom is null) and (@DatamovimentoTo is null)) OR (GP.Movimenti.DataMovimento between @DatamovimentoFrom and @DatamovimentoTo))
      and ((@Impianto is null) OR (GP.Impianti.IDImpianto IN (select param from GP.fn_Parametri(@Impianto, ','))))
      and gp.composizionecolori.applicazione = 'b'  
      and GP.anagcolori.IDFamiglia = @IDFamiglia 



/* creazione tipo per passaggio dati strutturati alla stored procedure GP.QuickReportDirezionale */
CREATE TYPE [GP].[QuickReportInfoTable] AS TABLE ( Applicazione char, IDFamiglia int, Impianti varchar(100) )
 
/* store procedure per il calcolo dei valori quickreport */
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		Giuseppe Dattilo	
-- Create date: 11/02/2013
-- Description:	Ritorna le informazioni relative al quick report del report direzionale...
-- =============================================
CREATE PROCEDURE GP.QuickReportDirezionale
	-- Add the parameters for the stored procedure here
	@DatamovimentoFrom          DateTime     = NULL,
	@DatamovimentoTo            DateTime     = NULL,
	@QuickReportInfoItems       GP.QuickReportInfoTable READONLY
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

    -- temp table for containig results...
    declare @resultsTable table (ID int, Kg int, N int);
        
    -- working code...
    MERGE @resultsTable AS pi
    USING (
        SELECT
		GP.anagcolori.IDFamiglia, sum(GP.Movimenti.Quantita) as Kg, count(GP.Movimenti.quantita) as N
		FROM GP.ComposizioneColori  
		INNER JOIN GP.Movimenti ON GP.ComposizioneColori.IDPolvere = GP.movimenti.IDPolvere
		INNER JOIN GP.Impianti ON GP.Movimenti.IDImpianto = GP.Impianti.IDImpianto
		INNER JOIN GP.causalimagazzino ON GP.Movimenti.IDCausale = GP.causalimagazzino.IDCausale
		INNER JOIN GP.anagcolori ON GP.ComposizioneColori.IDColore = GP.AnagColori.IDColore
		INNER JOIN @QuickReportInfoItems as A on GP.AnagColori.IDFamiglia = A.IDFamiglia
		where GP.CausaliMagazzino.CodCausale = 'S'
              and (((@DatamovimentoFrom is null) and (@DatamovimentoTo is null)) OR (GP.Movimenti.DataMovimento between @DatamovimentoFrom and @DatamovimentoTo))		
			  and ((A.Impianti is null) OR (GP.Impianti.IDImpianto IN (select param from GP.fn_Parametri(A.Impianti, ','))))
			  and gp.composizionecolori.applicazione = A.Applicazione  
			  and GP.anagcolori.IDFamiglia = A.IDFamiglia
	    Group by GP.anagcolori.IDFamiglia    
    ) AS src (IDFamiglia, Kg, N)
    ON pi.ID = src.IDFamiglia
    WHEN NOT MATCHED THEN    
       INSERT (ID, KG, N) values (src.IDFamiglia, src.Kg, src.N);
      
    select * from @resultsTable
		  
END